import { createRouter, createWebHistory } from 'vue-router'
import RouterConfig from './config'
import store from '@/store/index'

const Login = () => import('@/views/Login')
const MainBox = () => import('@/views/MainBox')

const routes = [
  {
    path: '',
    redirect: '/login'
  },
  {
    path: '/login',
    name: 'login',
    component: Login
  },
  {
    path: '/mainbox',
    name: 'mainbox',
    component: MainBox
  }
]

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes
})

/**
 * beforeEach()在路由跳转之前
 *  to:     要跳转的路由
 *  from:
 *  next()：放行进入下一个流程
 */
router.beforeEach((to, from, next) => {
  // 1. 如果是login就直接放行
  if (to.name === 'login') {
    next()
    configRouter()
  } else {
    // 2. 未授权，重定向到login（判断token值是否存在，不存在就跳转到login页面）
    if (!localStorage.getItem('token')) {
      next({
        path: '/login'
      })
    } else {
      // 3. 如果授权(已经登录过了) ，就需要判断是否为第一次登录
      // 第一次登录就需要配置一遍路由 configRouter()，如果不是第一次登录就不需要配置。
      if (!store.state.isGetterRouter) {
        configRouter()
        next({
          // to.path - 当前的路径，始终解析为绝对路径；
          // to.fullPath - 完整的解析URL包含查询参数和哈希。
          path: to.fullPath
        })
      } else {
        next()
      }
    }
  }
})

/**
 * 定义遍历路由函数
 */
const configRouter = () => {
  // 遍历子路由（config.js文件中配置的子路由）
  RouterConfig.forEach((item) => {
    // 使用router.addRoute()方法，添加子路由给mainbox组件
    router.addRoute('mainbox', item)
  })
  // 改变 isGetterRouter 值为true
  store.commit('changeGetterRouter', true)
}

export default router
